import axios from "axios";
import {message} from "antd";
import store from "../store";

const OK = 200;
const ERROR = 500;
const LOGIN_ERROR = 402;
const ACCESS_ERROR = 401;

/**
 * 创建axios实例，并进行初始化设置
 * @type {AxiosInstance}
 */
const service = axios.create({
	baseURL: "/api",
	timeout: 50000
})

/**
 * 创建请求拦截器，可以设置携带验证信息Token等参数
 */
service.interceptors.request.use(config => {
	const token = store.getState('user').user.token
	if (token !== undefined) {
		config.headers = {
			"Authorization": "Bearer " + token
		}
	}
	//自行添加拦截内容
	return config;
}, error => {
	console.log(error);
	message.error(error);
	Promise.reject(error);
})

/**
 * 请求相应的拦截器
 * 可以在onFulfilled中对返回的数据进行对应的效验工作
 */
service.interceptors.response.use(
	response => {
		const {data} = response;
		if (data.code === false) {
			switch (data.status) {
				case OK:
					return data;
				case ERROR:
					message.error(data.message);
					return Promise.reject(data.message);
				case LOGIN_ERROR:
					message.error('您的用户名或密码错误，请重试！');
					return Promise.reject('您的用户名或密码错误，请重试！');
				case ACCESS_ERROR:
					message.error('您没有足够的权限来访问这个页面');
					return Promise.reject('您没有足够的权限来访问这个页面');
				default:
					return data;
			}
		} else {
			if (data.data === false) {
				message.error(data.msg)
			}
			return data;
		}

	},
	error => {
		console.log("response error " + error)
		return Promise.reject(error);
	}
);

export default service;
